Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Print Search
帖子排序:    
   2010-05-31, 16:43 下午
wParam 离线,最后访问时间: 2010/6/5 7:34:22 wParam

发帖数前500位
注册: 2010-05-13
发 贴: 4
Embarrassed [:$] 正在学习张老师的《软件调试》有些地方想不明白,向各位前辈求教(第一帖不能回复..我很郁闷再发一贴)
Reply Quote
先怀念一下我的处女贴.....
问题是这样的很简单书中(11.2.3)说软件异常都是通过直接或间接调用KiRaiseException产生的,
我想问的问题就是 硬件异常的处理是根据异常向量号在IDT表中查找使用哪个函数处理的那软件异常的处理过程是不是不需要查 IDT表呢?如果需要的话在哪个环节查的呢?
第一次提问...问的含糊的很各位前辈见谅 海涵 不要拍砖...
IP 地址: 已记录   报告
   2010-06-20, 20:22 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 正在学习张老师的《软件调试》有些地方想不明白,向各位前辈求教(第一帖不能回复..我很郁闷再发一贴)
Reply Quote

是的,软件异常不需要查IDT,KiRaiseException在根据用户态传下来的异常上下文结构模拟出一个与发生硬件异常一样的TrapFrame结构后,便调用KiDispatchException来分发异常了。


IP 地址: 已记录   报告
   2010-06-21, 17:00 下午
wParam 离线,最后访问时间: 2010/6/5 7:34:22 wParam

发帖数前500位
注册: 2010-05-13
发 贴: 4
Big Smile [:D] Re: 正在学习张老师的《软件调试》有些地方想不明白,向各位前辈求教(第一帖不能回复..我很郁闷再发一贴)
Reply Quote
谢谢您的耐心回复,这个问题我明白了,我还有一个困扰我很久的问题...在FS:[0]指向的异常处理链表最顶端的那项(前一项地址为FFFFFFFF)是哪个函数呢?就是调用
UnhandledExceptionFilter()方法的那个方法。这个异常处理的过程是BaseProceStart安装的呢还是编译器安装的呢我一直以为他是UnhandledExceptionFilter()。很困惑,难道他是__exception_handler3?还是RtlpExecuteHandlerForException但是我觉得都不想啊...
期待您的再次精彩解答,谢谢

IP 地址: 已记录   报告
   2010-06-21, 22:01 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 正在学习张老师的《软件调试》有些地方想不明白,向各位前辈求教(第一帖不能回复..我很郁闷再发一贴)
Reply Quote

用!exchain命令可以显示FS[0]链条:

0:000> !exchain
0007ffb0: notepad!_except_handler3+0 (010075ba)
  CRT scope  0, filter: notepad!WinMainCRTStartup+18d (0100752a)
                func:   notepad!WinMainCRTStartup+1a1 (0100753e)
0007ffe0: kernel32!_except_handler3+0 (7c839ad8)
  CRT scope  0, filter: kernel32!BaseProcessStart+29 (7c8438ea)
                func:   kernel32!BaseProcessStart+3a (7c843900)
Invalid exception stack at ffffffff

上面一个是编译器入口函数登记的异常处理器,后一个是BaseProcessStart函数登记的。当应用程序中发生未处理异常时,这两个处理器的过滤函数会调用UnhandledExceptionFilter().

对于发生在WinMainCRTStartup函数之内的异常,那么上面一个处理器会先被调用,也就是执行0100752a这个编译器根据过滤表达式所编译出的函数:

notepad!WinMainCRTStartup+0x18d:
0100752a 8b45ec          mov     eax,dword ptr [ebp-14h]
0100752d 8b08            mov     ecx,dword ptr [eax]
0100752f 8b09            mov     ecx,dword ptr [ecx]
01007531 894dd8          mov     dword ptr [ebp-28h],ecx
01007534 50              push    eax
01007535 51              push    ecx
01007536 e88b000000      call    notepad!_XcptFilter (010075c6)
0100753b 59              pop     ecx
0100753c 59              pop     ecx
0100753d c3              ret

尽管notepad!_XcptFilter内部有多个分支,但是大多数情况都是调用UnhandledExceptionFilter,即:

msvcrt!_XcptFilter+0x158:
77c32f06 ff750c          push    dword ptr [ebp+0Ch]
77c32f09 ff15c411c177    call    dword ptr [msvcrt!_imp__UnhandledExceptionFilter (77c111c4)]

其实下面一个异常处理器(BaseProcessStart的)也是调用UnhandledExceptionFilter:

0:000> u 7c8438ea
kernel32!BaseProcessStart+0x29:
7c8438ea 8b45ec          mov     eax,dword ptr [ebp-14h]
7c8438ed 8b08            mov     ecx,dword ptr [eax]
7c8438ef 8b09            mov     ecx,dword ptr [ecx]
7c8438f1 894de4          mov     dword ptr [ebp-1Ch],ecx
7c8438f4 50              push    eax
7c8438f5 e8d0060200      call    kernel32!UnhandledExceptionFilter (7c863fca)
7c8438fa c3              ret

 


IP 地址: 已记录   报告
   2010-06-23, 23:43 下午
wParam 离线,最后访问时间: 2010/6/5 7:34:22 wParam

发帖数前500位
注册: 2010-05-13
发 贴: 4
Cool [H] Re: 正在学习张老师的《软件调试》有些地方想不明白,向各位前辈求教(第一帖不能回复..我很郁闷再发一贴)
Reply Quote
谢谢您的解答,是我没好好看书,书上也说的很明白了,您是张老师吧?
自己用windbg 调了一下,基本明白了,异常处理链表那个最顶端的处理程序是kernel32.dll中的kernel32!_except_handler3,windbg的Symbol果然很到位,函数名称一目了然..要是OD也有这功能就完美了。
《软件调试》让我收获很多,以后有不懂的还要向您请教,再次感谢您的耐心解答。

IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » 正在学习张老师的《软件调试》有些地方想不明白,向各位前辈求教(第一帖不能回复..我很郁闷再发一贴)

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.